package book.service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import book.dao.IBookDao;
import book.dao.impl.BookDaoFileImpl;
import book.dao.impl.BookDaoImpl;
import book.dao.impl.BookDaoMemoryImpl;
import book.po.Book;

/**
 * 图书业务类
 * MVC的model类
 * 图书增删改查已全部实现！
 * 支持内存、文件、数据库存储。
 * Service可以结合业务逻辑，对多个数据库dao进行操作。本程序单表，所以service代码比较简答，只有一行调用dao方法
 * @author Dengcj
 *
 */
public class BookService {
	private IBookDao bookDao = new BookDaoImpl();  //数据库存储
	//private IBookDao bookDao = new BookDaoMemoryImpl();  //内存存储对象  controller中删除功能代码需修改。
	//private IBookDao bookDao = new BookDaoFileImpl(); //文件存储对象 controller中删除功能代码需修改。
	/**
	 * 按价格查找图书
	 * @param bookList 被查询的集合
	 * @param book 需要查询的图书
	 */
	public List<Book> searchByPrice(List<Book> bookList,Book book) {
		List<Book> result = new ArrayList<Book>(); //查询结果集
		Collections.sort(bookList);
		int m = -1;
		while ((m = Collections.binarySearch(bookList, book, null)) >= 0) {
			Book bk = bookList.get(m);
			bookList.remove(m);
			result.add(bk);
		}
		return result;
	}
	/**
	 * 添加图书
	 * @param book
	 */
	public void addBook(Book book) {
		bookDao.save(book);	
	}
	/**
	 * 修改图书
	 * @param id
	 * @param book
	 */
	public void updateBook(int id,Book book) {
		bookDao.update(id,book);
		
	}
	/**
	 * 删除图书
	 * @param id
	 */
	public void deleteBook(int id) {
		bookDao.delete(id);
		
	}
	/**
	 * 查询图书
	 * @param id
	 * @return
	 */
	public Book getBook(int id) {
		return bookDao.get(id);
	}

	/**
	 * 查询所有图书
	 * @return
	 */
	public List<Book> findAllBook(){
		return bookDao.findAll();
		
	}
}